package com.hz.friends.serverrequest;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.security.auth.callback.Callback;

import org.apache.http.Header;
import org.json.JSONException;
import org.json.JSONObject;

import android.R.integer;
import android.annotation.SuppressLint;

import com.alibaba.fastjson.JSON;
import com.avos.avoscloud.AVCloud;
import com.avos.avoscloud.AVException;
import com.avos.avoscloud.AVFile;
import com.avos.avoscloud.AVGeoPoint;
import com.avos.avoscloud.AVInstallation;
import com.avos.avoscloud.AVMobilePhoneVerifyCallback;
import com.avos.avoscloud.AVOSCloud;
import com.avos.avoscloud.AVObject;
import com.avos.avoscloud.AVPush;
import com.avos.avoscloud.AVQuery;
import com.avos.avoscloud.AVUser;
import com.avos.avoscloud.CountCallback;
import com.avos.avoscloud.FindCallback;
import com.avos.avoscloud.FunctionCallback;
import com.avos.avoscloud.GetCallback;
import com.avos.avoscloud.LogInCallback;
import com.avos.avoscloud.ProgressCallback;
import com.avos.avoscloud.RequestMobileCodeCallback;
import com.avos.avoscloud.SaveCallback;
import com.avos.avoscloud.SignUpCallback;
import com.hz.friends.chat.Helper.CCPConfig;
import com.hz.friends.serverrequest.ALPushCenter.ALPushType;
import com.hz.friends.serverrequest.ALEngineConfig.*;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import org.json.JSONArray;

@SuppressLint("DefaultLocale")
public class ALUserEngine {

	protected static final Object Boolean = null;

	static int DEFAULE_LIMITE = 20;

	// 单例
	private static ALUserEngine userEngine = null;

	public static ALUserEngine defauleEngine() {
		if (userEngine == null) {
			userEngine = new ALUserEngine();
		}
		return userEngine;
	}

	// public void savePassword(
	// String password
	// )
	// {
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("password", password);
	// AVCloud.callFunctionInBackground("savePassword", params, null);
	// }
	//
	// @SuppressWarnings("unused")
	// private static AVQuery<AVObject> _queryUserRelation(
	// AVUser fromUser,
	// AVUser toUser,
	// ALUserRelationType type,
	// int limit,
	// int skip){
	//
	// AVQuery<AVObject> relationQ = AVQuery.getQuery("UserRelation");
	// if (fromUser!=null)
	// relationQ.whereEqualTo("fromUser",ALEngineConfig.objectWithoutData(fromUser));
	// if (toUser!=null)
	// relationQ.whereEqualTo("toUser",ALEngineConfig.objectWithoutData(toUser));
	// if (type.get_value()!=0) relationQ.whereEqualTo("type",type.get_value());
	// if (limit>0) relationQ.limit(limit);
	// if (skip>0) relationQ.skip(skip);
	// ALEngineConfig._includeKeyWithUserRelation(relationQ);
	// relationQ.orderByDescending("createdAt");
	// return relationQ;
	// }
	//
	// // 1
	// /**
	// *
	// * 手动注册
	// * @param username 用户名
	// * @param password 密码
	// *
	// */
	// public void signUp(
	// String username,
	// final String password,
	// final String email,
	// final CallBack boolCallback)
	// {
	// if (ALEngineConfig.isLoggedIn())
	// {
	// ALUserEngine.this.logOut();
	// }
	//
	// final AVUser user = new AVUser();
	// user.setUsername(username.toUpperCase());
	// user.setPassword(password);
	// if (email != null) user.setEmail(email);
	// // user.put("userKey", password);
	// user.signUpInBackground(new SignUpCallback() {
	// public void done(AVException e) {
	// if (e==null)
	// {
	// ALUserEngine.this.bindingUser();
	// ALUserEngine.this.savePassword(password);
	// }
	// boolCallback.done(e!=null,e);
	// }
	// });
	//
	// }
	//
	// // 2
	// /**
	// *
	// * 手动登录
	// * @param username 用户名
	// * @param password 密码
	// *
	// */
	// public void login(
	// String username,
	// final String password,
	// final CallBack boolCallback)
	// {
	//
	// AVUser.logInInBackground(username.toUpperCase(), password, new
	// LogInCallback<AVUser>() {
	// public void done(AVUser user, AVException e) {
	// if (user!=null&& e==null)
	// {
	// ALUserEngine.this.bindingUser();
	// ALUserEngine.this.savePassword(password);
	//
	// // user.put("userKey", password);
	// // user.saveEventually();
	//
	// }
	//
	// boolCallback.done(user!=null, e);
	// }
	// });
	// }
	//
	// // 3
	// /**
	// * 登出
	// */
	// public void logOut() {
	// AVUser.logOut();
	// ALUserEngine.this.unbindingUser();
	// }
	//
	// // 44
	// /**
	// * 修改密码
	// *
	// * @param theOldPassword 老密码
	// * @param theNewPassword 新密码
	// * @param block 回调
	// */
	// // public void resetPassword(
	// // String oldPassword,
	// // String newPassword,
	// // final CallBack boolCallback)
	// // {
	// // if (!ALEngineConfig.isLoggedIn())
	// // {
	// // boolCallback.done(false, new AVException(110, "没有登录"));
	// // return;
	// // }
	// //
	// // if (oldPassword==null || newPassword==null || oldPassword.length()==0
	// || newPassword.length()==0)
	// // {
	// // boolCallback.done(false,new AVException(777123, "参数错误"));
	// // return;
	// // }
	// //
	// // HashMap <String,Object> params = new HashMap<String, Object>();
	// // params.put("oldPwd", oldPassword);
	// // params.put("newPwd", newPassword);
	// // AVCloud.callFunctionInBackground("resetPassword", params,new
	// FunctionCallback<Object>() {
	// //
	// // @Override
	// // public void done(Object object, AVException e) {
	// // // TODO Auto-generated method stub
	// // boolCallback.done(e==null,e);
	// // }
	// // } );
	// //
	// // }
	//
	// // 7
	// /**
	// * 用SNS数据登录
	// *
	// * @param theUid 登陆用uid <String>
	// * @param theType SNS类型 <enum>
	// * @param theNickname 用户昵称 <String>
	// * @param theHeadViewURL 用户头像URL <String>
	// * @param theGender 用户性别 <enum>
	// * @param resultBlock 是否登录成功 <BOOL>
	// */
	// public void loginByAuthData(
	// String uid,
	// ALAccessTokenType type,
	// String nickname,
	// String headViewURL,
	// Boolean gender,
	// final CallBack boolCallback)
	// {
	// if (uid==null || uid.length()==0 || type.get_value()==0)
	// {
	// boolCallback.done(false,new AVException(777123, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("uid", uid);
	// params.put("type", type.get_value());
	// if (nickname!=null) params.put("nickname", nickname);
	// if (headViewURL!=null) params.put("headViewURL", headViewURL);
	// params.put("gender", gender);
	//
	// AVCloud.callFunctionInBackground("getUserInfoWithAuthKey", params, new
	// FunctionCallback<HashMap<String,String>>() {
	//
	// @Override
	// public void done(HashMap <String,String> object, AVException e) {
	// // TODO Auto-generated method stub
	// if (object==null || e!=null)
	// {
	// boolCallback.done(false,e);
	// return;
	// }
	// String username = (String)object.get("username");
	// String password = (String)object.get("password");
	// ALUserEngine.this.login(username, password, boolCallback);
	// }
	// });
	// }
	//
	// // 8
	// /**
	// * 更新用户SNS数据
	// */
	// public void updateAuthData(
	// String uid,
	// ALAccessTokenType type,
	// final CallBack boolCallback)
	// {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (uid==null || uid.length()==0 || type.get_value()==0)
	// {
	// boolCallback.done(false,new AVException(777123, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("uid", uid);
	// params.put("type", type.get_value());
	//
	// AVCloud.callFunctionInBackground("addAuthKey", params, new
	// FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null,e);
	// }
	// });
	// }
	//
	// // 9
	// /**
	// * 删除用户绑定的SNS数据
	// */
	// public void deleteAuthData(
	// ALAccessTokenType type,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (type.get_value()==0)
	// {
	// boolCallback.done(false,new AVException(777123, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("type", type.get_value());
	//
	// AVCloud.callFunctionInBackground("removeAuthKey", params, new
	// FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null,e);
	// }
	// });
	// }
	//
	// // 4
	// //是否已登录
	// public Boolean isLoggedIn() {
	// return ALEngineConfig.user().isAuthenticated();
	// }
	//
	// // 5
	// /**
	// * 添加设备绑定
	// */
	// public void bindingUser() {
	// AVInstallation.getCurrentInstallation().put("user",ALEngineConfig.user());
	// AVInstallation.getCurrentInstallation().saveInBackground(new
	// SaveCallback() {
	//
	// @Override
	// public void done(AVException e) {
	// // TODO Auto-generated method stub
	// if (e!=null)
	// {
	// AVQuery<AVInstallation> installQ = AVInstallation.getQuery();
	// installQ.whereEqualTo("user", AVUser.getCurrentUser());
	// installQ.whereNotEqualTo("objectId",
	// AVInstallation.getCurrentInstallation().getObjectId());
	// installQ.findInBackground(new FindCallback<AVInstallation>() {
	//
	// @Override
	// public void done(List<AVInstallation> installs,
	// AVException e) {
	// // TODO Auto-generated method stub
	// if (e!=null && installs.size()>0)
	// {
	// for (AVInstallation install : installs)
	// {
	// install.remove("user");
	// }
	// AVObject.saveAllInBackground(installs);
	// }
	// }
	// });
	// }
	// }
	// });
	// }
	//
	// // 6
	// /**
	// * 解除设备绑定
	// */
	// public void unbindingUser() {
	// AVInstallation.getCurrentInstallation().remove("user");
	// AVInstallation.getCurrentInstallation().saveInBackground();
	// }
	//
	// // 10
	// /**
	// * 上传用户坐标
	// *
	// * @param theLatitude 横坐标
	// * @param theLongitude 纵坐标
	// * @param thePlace 地点名
	// * @param resultBlock 回调
	// */
	// public void updateLocation(
	// double latitude,
	// double longitude,
	// String place,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (latitude==0 && longitude==0)
	// {
	// boolCallback.done(false,new AVException(777123, "参数错误"));
	// return;
	// }
	//
	// HashMap<String, Object> params = new HashMap<String, Object>();
	// params.put("latitude", latitude);
	// params.put("longitude", longitude);
	// params.put("place", place);
	//
	// AVCloud.callFunctionInBackground("updateLocation", params, new
	// FunctionCallback<Boolean>() {
	//
	// @Override
	// public void done(Boolean suc, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null, e);
	// }
	// });
	// }
	//
	 // 11
	 /**
	 * 上传文件1
	 *
	 * @param imageData 文件数据 <Data>
	 * @param resultBlock 返回文件地址 <String>
	 * @param progressBlock 进度 <int>
	 */
	 public void uploadFileData(
	 byte[] fileData,
	 final CallBack progressBlock,
	 final CallBack stringCallback) {
	 final AVFile file = new AVFile(fileData);
	 file.saveInBackground(new SaveCallback() {
	
	 @Override
	 public void done(AVException e) {
	 // TODO Auto-generated method stub
	 stringCallback.done(file.getUrl(),e);
	 }
	 }, new ProgressCallback() {
	
	 @Override
	 public void done(Integer progress) {
	 // TODO Auto-generated method stub
	 progressBlock.done(progress,null);
	 }
	 });
	 }
	
	 // 12
	 /**
	 * 上传文件2
	 *
	 * @param imageData 文件路径 <String>
	 * @param resultBlock 返回文件地址 <String>
	 * @param progressBlock 进度 <int>
	 *
	 */
	 public void uploadFilePath(
	 String fileName,
	 String filePath,
	 final CallBack progressBlock,
	 final CallBack stringCallback) {
	
	 try {
	 final AVFile file = AVFile.withAbsoluteLocalPath(fileName,filePath);
	 file.saveInBackground(new SaveCallback() {
	
	 @Override
	 public void done(AVException e) {
	 stringCallback.done(file.getUrl(),e);
	 }
	 }, new ProgressCallback() {
	
	 @Override
	 public void done(Integer progress) {
	 progressBlock.done(progress,null);
	 }
	 });
	 } catch (Exception e) {
	 // TODO Auto-generated catch block
	 stringCallback.done(null,new AVException(e.getCause()));
	 }
	
	 }
	// // 13
	// /**
	// * 更新我的用户资料
	// *
	// * @param theNickname 昵称
	// * @param theEmail 邮箱
	// * @param theGender 性别
	// * @param theHeadViewURL 头像地址
	// * @param theSignature 签名
	// * @param theInterest 兴趣
	// * @param theAffectiveState 情感状态
	// * @param theBrithday 生日
	// * @param theTelephone 电话
	// * @param theMobile 手机
	// * @param theAddress 住址
	// * @param theZipcode 邮编
	// * @param theNationality 国籍
	// * @param theBrithProvince 出生省份
	// * @param theGraduateSchool 毕业学校
	// * @param theCompany 所在公司
	// * @param theEducation 教育程度
	// * @param theBloodType 血型
	// * @param resultBlock 是否成功
	// */
	// // public void updateUserInfo(
	// // String nickname,
	// // final String email,
	// // final ALUserGender gender,
	// // final String headViewURL,
	// // final ALSexualOrientation sexualOrientation,
	// // final String introductionOfVoiceURL,//语音简介
	// // final Double introductionOfVoiceOfDuration,//语音时长
	// // final String signature,
	// // final String interest,
	// // final String affectiveState,
	// // final Date brithday,
	// // final String telephone,
	// // final String mobile,
	// // final String address,
	// // final String zipcode,
	// // final String nationality,
	// // final String brithProvince,
	// // final String graduateSchool,
	// // final String company,
	// // final String education,
	// // final String bloodType,
	// // final CallBack boolCallback) {
	// //
	// // if (!ALEngineConfig.isLoggedIn())
	// // {
	// // boolCallback.done(false, new AVException(110, "没有登录"));
	// // return;
	// // }
	// //
	// // if (nickname!=null && nickname.length()>0)
	// // {
	// // HashMap <String,Object> params = new HashMap<String, Object>();
	// // params.put("nickname", nickname);
	// //
	// // AVCloud.callFunctionInBackground("updateNickname", params, new
	// FunctionCallback<Boolean>() {
	// //
	// // @Override
	// // public void done(java.lang.Boolean suc, AVException e) {
	// // // TODO Auto-generated method stub
	// // if (e==null)
	// // {
	// // ALUserEngine.this.updateUserInfo(null, email, gender, headViewURL,
	// sexualOrientation, introductionOfVoiceURL, introductionOfVoiceOfDuration,
	// signature, interest, affectiveState, brithday, telephone, mobile,
	// address, zipcode, nationality, brithProvince, graduateSchool, company,
	// education, bloodType, boolCallback);
	// // }
	// // else
	// // {
	// // boolCallback.done(false, e);
	// // }
	// // }
	// // });
	// // }
	// // else
	// // {
	// // Boolean isNeedToSave = false;
	// // AVUser user = ALEngineConfig.user();
	// //// if (nickname!=null){
	// //// isNeedToSave = true;
	// //// user.put("nickname", nickname);
	// //// }
	// // if (email!=null){
	// // isNeedToSave = true;
	// // user.put("email", email);
	// // }
	// // if (gender!=null){
	// // isNeedToSave = true;
	// // user.put("gender", gender.get_value());
	// // }
	// // if (headViewURL!=null){
	// // isNeedToSave = true;
	// // user.put("headViewURL", headViewURL);
	// // }
	// // if (signature!=null){
	// // isNeedToSave = true;
	// // user.put("signature", signature);
	// // }
	// // if (interest!=null){
	// // isNeedToSave = true;
	// // user.put("interest", interest);
	// // }
	// // if (affectiveState!=null){
	// // isNeedToSave = true;
	// // user.put("affectiveState", affectiveState);
	// // }
	// // if (brithday!=null){
	// // isNeedToSave = true;
	// // user.put("brithday", brithday);
	// // }
	// // if (telephone!=null){
	// // isNeedToSave = true;
	// // user.put("telephone", telephone);
	// // }
	// // if (mobile!=null){
	// // isNeedToSave = true;
	// // user.put("mobile", mobile);
	// // }
	// // if (address!=null){
	// // isNeedToSave = true;
	// // user.put("address", address);
	// // }
	// // if (zipcode!=null){
	// // isNeedToSave = true;
	// // user.put("zipcode", zipcode);
	// // }
	// // if (nationality!=null){
	// // isNeedToSave = true;
	// // user.put("nationality", nationality);
	// // }
	// // if (brithProvince!=null){
	// // isNeedToSave = true;
	// // user.put("brithProvince", brithProvince);
	// // }
	// // if (graduateSchool!=null){
	// // isNeedToSave = true;
	// // user.put("graduateSchool", graduateSchool);
	// // }
	// // if (company!=null){
	// // isNeedToSave = true;
	// // user.put("company", company);
	// // }
	// // if (education!=null){
	// // isNeedToSave = true;
	// // user.put("education", education);
	// // }
	// // if (bloodType!=null){
	// // isNeedToSave = true;
	// // user.put("bloodType", bloodType);
	// // }
	// // if (sexualOrientation!=null)
	// // {
	// // isNeedToSave = true;
	// // user.put("sexualOrientation",sexualOrientation.get_value());
	// // }
	// // if (introductionOfVoiceURL!=null)
	// // {
	// // user.put("introductionOfVoiceURL",introductionOfVoiceURL);
	// //
	// user.put("introductionOfVoiceOfDuration",introductionOfVoiceOfDuration);
	// // }
	// //
	// // if (isNeedToSave) ALEngineConfig.user().saveInBackground(new
	// SaveCallback() {
	// // public void done(AVException e) {
	// // boolCallback.done(e==null, e);
	// // }
	// // });
	// // else boolCallback.done(false, new AVException(777115, "参数错误"));
	// // }
	// //
	// // }
	//
	// // 45
	// //创建photo
	// public void createPhoto(
	// String url,
	// String description,
	// final CallBack boolCallback
	// ){
	//
	// final AVObject photo = AVObject.create("Photo");
	// photo.put("url", url);
	// if (description!=null) photo.put("description", description);
	// photo.put("isDeleted", false);
	// photo.saveInBackground(new SaveCallback() {
	//
	// @Override
	// public void done(AVException e) {
	// boolCallback.done(photo, e);
	// }
	// });
	// }
	//
	// // 14
	// /**
	// * 上传照片到相册
	// *
	// * @param thePhotos
	// * @param resultBlock
	// */
	// public void updateMyAlbum(
	// List <AVObject> photos,
	// final CallBack boolCallback
	// ){
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// ALEngineConfig.user().getRelation("album").addAll(photos);
	// ALEngineConfig.user().saveInBackground(new SaveCallback() {
	//
	// @Override
	// public void done(AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null, e);
	// }
	// });
	// }
	//
	// // 15
	// /**
	// * 删除照片到相册
	// *
	// * @param thePhotos Photo
	// * @param resultBlock
	// */
	// public void deleteMyAlbum(
	// List <AVObject> photos,
	// final CallBack boolCallback
	// ){
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// for (AVObject photo : photos)
	// {
	// photo.put("isDeleted",true);
	// }
	//
	// AVObject.saveAllInBackground(photos, new SaveCallback() {
	//
	// @Override
	// public void done(AVException e) {
	// boolCallback.done(e==null, e);
	// }
	// });
	// }
	//
	// // 16
	// /**
	// * 查看相册album
	// *
	// * @param resultBlock
	// */
	// public void getUserAlbum(
	// AVUser user,
	// final int limit,
	// final CallBack listCallback
	// ){
	// user.fetchInBackground(new GetCallback<AVObject>() {
	//
	// @Override
	// public void done(AVObject obj, AVException e) {
	// // TODO Auto-generated method stub
	// AVUser user = (AVUser)obj;
	// AVQuery<AVObject> albumQ = user.getRelation("album").getQuery();
	// albumQ.limit(limit);
	// albumQ.orderByAscending("createdAt");
	// albumQ.whereNotEqualTo("isDeleted", true);
	// albumQ.findInBackground(new FindCallback<AVObject>() {
	//
	// @Override
	// public void done(List<AVObject> album, AVException e) {
	// listCallback.done(album, e);
	// }
	// });
	// }
	// });
	// }
	//
	// // 新增
	// /**
	// * 查看相册album
	// *
	// * @param resultBlock
	// */
	// public void getGroupAlbum(
	// AVObject group,
	// final int limit,
	// final CallBack listCallback
	// ){
	// group.fetchInBackground(new GetCallback<AVObject>() {
	//
	// @Override
	// public void done(AVObject obj, AVException e) {
	// // TODO Auto-generated method stub
	// AVQuery<AVObject> albumQ = obj.getRelation("album").getQuery();
	// albumQ.limit(limit);
	// albumQ.orderByAscending("createdAt");
	// albumQ.whereNotEqualTo("isDeleted", true);
	// albumQ.findInBackground(new FindCallback<AVObject>() {
	//
	// @Override
	// public void done(List<AVObject> album, AVException e) {
	// listCallback.done(album, e);
	// }
	// });
	// }
	// });
	// }
	//
	//
	//
	// //用户关系
	//
	// // 17
	// /**
	// * 添加关注
	// *
	// * @param theUser 用户 <User>
	// * @param theBkName 备注姓名 <String>
	// * @param resultBlock 是否成功 <BOOL>
	// */
	// public void addFollow(
	// final AVUser user,
	// String bkName,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || user.getObjectId()==null ||
	// user.getObjectId().equals(ALEngineConfig.user().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(115, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("toUserId", user.getObjectId());
	// params.put("fromUserId", ALEngineConfig.user().getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfFollow.get_value());
	// if (bkName!=null) params.put("bkName", bkName);
	//
	// AVCloud.callFunctionInBackground("addUserRelation", params, new
	// FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null,e);
	//
	// if (e==null)
	// {
	// /*
	// * 发通知
	// */
	// ALPushCenter.isClosePushAlert(AVUser.getCurrentUser(), new CallBack() {
	//
	// @Override
	// public void done(Object obj, AVException e) {
	// // TODO Auto-generated method stub
	// if (e==null && (Boolean)obj!=true)
	// {
	// AVQuery<AVInstallation> installQ = AVInstallation.getQuery();
	// installQ.whereEqualTo("user", user);
	//
	// ALPushCenter.sendPush(installQ, ALPushType.ALPushTypeOfNewFollow, 0);
	// }
	// }
	// });
	// }
	// }
	// });
	// }
	//
	//
	//
	// public String getAlertStringWithType(
	// ALPushType pushType){
	//
	// String nickname = AVUser.getCurrentUser().getString("nickname");
	// String alertStr = null;
	// switch (pushType) {
	// // case ALPushTypeOfMessageOfChat:
	// // {
	// // if (nickname!=null)
	// // {
	// // alertStr = nickname + " : " + "[关注]";
	// // }
	// // else
	// // {
	// // alertStr = "你有一个新的粉丝";
	// // }
	// // }
	// // break;
	// case ALPushTypeOfNewFollow:
	// {
	// if (nickname!=null)
	// {
	// alertStr = nickname + " : " + "[关注]";
	// }
	// else
	// {
	// alertStr = "你有一个新的粉丝";
	// }
	// }
	// break;
	// case ALPushTypeOfGift:
	// {
	// if (nickname!=null)
	// {
	// alertStr = nickname + " : " + "[礼物]";
	// }
	// else
	// {
	// alertStr = "你收到一份礼物";
	// }
	// }
	// break;
	// case ALPushTypeOfMessageOfBBs:
	// {
	// if (nickname!=null)
	// {
	// alertStr = nickname + " : " + "[留言]";
	// }
	// else
	// {
	// alertStr = "你收到一个新的留言";
	// }
	// }
	// break;
	// case ALPushTypeOfSpecialRemind:
	// {
	// if (nickname!=null)
	// {
	// alertStr = nickname + " : " + "[上线]";
	// }
	// else
	// {
	// alertStr = "你的特别关注上线了";
	// }
	// }
	// break;
	// default:
	// break;
	// }
	// return alertStr;
	// }
	//
	// // 18
	// /**
	// *
	// * 解除关注
	// *
	// * 关注/特别关注 都会被解除
	// * @param theUser 用户 <User>
	// * @param resultBlock 是否成功 <BOOL>
	// */
	// public void removeFollow(
	// final AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || user.getObjectId()==null ||
	// user.getObjectId().equals(ALEngineConfig.user().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(115, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("toUserId", user.getObjectId());
	// params.put("fromUserId", ALEngineConfig.user().getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfFollow.get_value());
	//
	// AVCloud.callFunctionInBackground("removeUserRelation", params, new
	// FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null,e);
	// }
	// });
	// }
	//
	// // 19
	// /**
	// * 添加特别关注
	// *
	// * @param theUser 用户 <User>
	// * @param resultBlock 是否成功 <BOOL>
	// */
	// public void updateFollowToSpecialFollow(
	// AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || user.getObjectId()==null ||
	// user.getObjectId().equals(ALEngineConfig.user().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(115, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("toUserId", user.getObjectId());
	// params.put("fromUserId", ALEngineConfig.user().getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfFollow.get_value());
	//
	// AVCloud.callFunctionInBackground("updateUserRelationToSpecial", params,
	// new FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null,e);
	// }
	// });
	// }
	//
	// // 20
	// /**
	// * 移除特别关注
	// *
	// * @param theUser 用户 <User>
	// * @param resultBlock 是否成功 <BOOL>
	// */
	// public void updateSpecialFollowToFollow(
	// AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || user.getObjectId()==null ||
	// user.getObjectId().equals(ALEngineConfig.user().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(115, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("toUserId", user.getObjectId());
	// params.put("fromUserId", ALEngineConfig.user().getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfFollow.get_value());
	//
	// AVCloud.callFunctionInBackground("updateUserRelationToUnspecial", params,
	// new FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null,e);
	// }
	// });
	// }
	//
	//
	// // 21
	// /**
	// * 用户的关注(关注+特别关注)
	// *
	// * @param theUser 用户 <User>
	// * @param theLimit 分页 <int>
	// * @param theSkip 分页 <int>
	// * @param resultBlock 用户列表 <User>
	// */
	// public void getFolloweeList(
	// AVUser user,
	// int limit,
	// int skip,
	// final CallBack listCallback) {
	//
	// AVQuery<AVObject> followsQ =
	// ALUserEngine._queryUserRelation(user,null,ALUserRelationType.ALUserRelationTypeOfFollow,limit,skip);
	// followsQ.findInBackground(new FindCallback<AVObject>() {
	//
	// @Override
	// public void done(List<AVObject> objects, AVException e) {
	//
	// if (e!=null || objects==null || objects.size()==0)
	// {
	// listCallback.done(null,e);
	// }
	// else
	// {
	// HashMap <String, ArrayList> params = new HashMap<String, ArrayList>();
	// ArrayList<AVObject> followees = new ArrayList<AVObject>();
	// ArrayList<AVObject> specials = new ArrayList<AVObject>();
	// params.put("followees", followees);
	// params.put("specials", specials);
	//
	// for (AVObject userRelation : objects)
	// {
	// AVObject toUser = userRelation.getAVObject("toUser");
	// if (toUser!=null)
	// {
	// followees.add(toUser);
	// if (userRelation.getBoolean("isSpecial"))
	// {
	// specials.add(toUser);
	// }
	// // else
	// // {
	// // followees.add(toUser);
	// // }
	// }
	// }
	//
	// listCallback.done(params,e);
	// }
	// }
	// });
	// }
	//
	// // 22
	// /**
	// * 用户关注数(关注+特别关注)
	// *
	// * @param theUser 用户 <User>
	// * @param resultBlock 用户数 <int>
	// */
	// public void getFolloweeCount(
	// AVUser user,
	// final CallBack numberCallback) {
	//
	// AVQuery<AVObject> followsQ =
	// ALUserEngine._queryUserRelation(user,null,ALUserRelationType.ALUserRelationTypeOfFollow,0,0);
	// followsQ.countInBackground(new CountCallback() {
	//
	// @Override
	// public void done(int number, AVException e) {
	// // TODO Auto-generated method stub
	// numberCallback.done(number, e);
	// }
	// });
	// }
	//
	// // 23
	// /**
	// * 用户的特别关注数
	// *
	// * @param theUser 用户 <User>
	// * @param resultBlock 用户数 <int>
	// */
	// public void getSpecialFollowCount(
	// AVUser user,
	// final CallBack numberCallback) {
	//
	// AVQuery<AVObject> followsQ =
	// ALUserEngine._queryUserRelation(user,null,ALUserRelationType.ALUserRelationTypeOfFollow,0,0);
	// followsQ.countInBackground(new CountCallback() {
	//
	// @Override
	// public void done(int number, AVException e) {
	// // TODO Auto-generated method stub
	// numberCallback.done(number, e);
	// }
	// });
	// }
	//
	// // 24
	// /**
	// * 用户的粉丝
	// *
	// * @param theUser 用户 <User>
	// * @param theLimit 分页 <int>
	// * @param theSkip 分页 <int>
	// * @param resultBlock 用户 <User>
	// */
	// public void getFollowerList(
	// AVUser user,
	// int limit,
	// int skip,
	// final CallBack listCallback) {
	//
	// AVQuery<AVObject> followsQ =
	// ALUserEngine._queryUserRelation(null,user,ALUserRelationType.ALUserRelationTypeOfFollow,limit,skip);
	// ALEngineConfig.findObjectsInBackground(followsQ, "fromUser",
	// listCallback);
	// }
	// // 25
	// /**
	// *
	// * 用户的粉丝数
	// *
	// * @param resultBlock 用户 <User>
	// * @param resultBlock 用户数 <int>
	// */
	// public void getFollowerCount(
	// AVUser user,
	// final CallBack numberCallback) {
	//
	// AVQuery<AVObject> followsQ =
	// ALUserEngine._queryUserRelation(null,user,ALUserRelationType.ALUserRelationTypeOfFollow,0,0);
	// followsQ.countInBackground(new CountCallback() {
	//
	// @Override
	// public void done(int number, AVException e) {
	// // TODO Auto-generated method stub
	// numberCallback.done(number, e);
	// }
	// });
	// }
	//
	// // 26
	// /**
	// *
	// * 用户的互粉
	// *
	// * @param theUser 用户 <User>
	// * @param theLimit 分页 <int>
	// * @param theSkip 分页 <int>
	// * @param resultBlock 用户 <User>
	// *
	// */
	// public void getFolloweeAndFollowerList(
	// AVUser user,
	// int limit,
	// int skip,
	// final CallBack listCallback) {
	//
	// AVQuery<AVObject> followsQ =
	// ALUserEngine._queryUserRelation(user,null,ALUserRelationType.ALUserRelationTypeOfFollow,limit,skip);
	// followsQ.whereEqualTo("isBilateral", true);
	// ALEngineConfig.findObjectsInBackground(followsQ, "toUser", listCallback);
	//
	// }
	//
	// // 27
	// /**
	// *
	// * 用户的互粉数
	// *
	// * @param theUser 用户 <User>
	// * @param resultBlock 回调 <int>
	// */
	// public void getFollowerAndFolloweeCount(
	// AVUser user,
	// final CallBack numberCallback) {
	//
	// AVQuery<AVObject> followsQ =
	// ALUserEngine._queryUserRelation(null,user,ALUserRelationType.ALUserRelationTypeOfFollow,0,0);
	// followsQ.whereEqualTo("isBilateral", true);
	// followsQ.countInBackground(new CountCallback() {
	//
	// @Override
	// public void done(int number, AVException e) {
	// // TODO Auto-generated method stub
	// numberCallback.done(number, e);
	// }
	// });
	// }
	//
	// // 28
	// /**
	// * 发布提醒
	// *
	// * @param theType 提醒类型 <enum>
	// */
	// public void postRemind() {
	//
	// AVQuery<AVObject> userRQ =
	// ALUserEngine._queryUserRelation(null,ALEngineConfig.user(),ALUserRelationType.ALUserRelationTypeOfFollow,0,0);
	// userRQ.whereEqualTo("isSpecial", true);
	// userRQ.whereNotEqualTo("isNotRemind", true);
	// userRQ.whereNotEqualTo("closePushAlert", true);
	//
	// AVQuery <AVInstallation> installQ = AVInstallation.getQuery();
	// installQ.whereMatchesKeyInQuery("user", "fromUser", userRQ);
	//
	// JSONObject params = new JSONObject();
	//
	// // AVPush.sendDataInBackground(params, installQ, null);
	// ALPushCenter.sendPush(installQ, ALPushType.ALPushTypeOfSpecialRemind, 0);
	// }
	//
	// // 29
	// /**
	// *
	// * 是否关注过
	// */
	// public void isMyFollowee(
	// final List<AVUser> friends,
	// final CallBack listCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// listCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// AVQuery<AVObject> userRQ =
	// ALUserEngine._queryUserRelation(ALEngineConfig.user(),null,ALUserRelationType.ALUserRelationTypeOfFollow,0,0);
	// userRQ.whereContainedIn("toUser", friends);
	// ALEngineConfig.findObjectsInBackground(userRQ, "toUser", listCallback);
	// }
	//
	// // 31
	// /**
	// * 昵称查找
	// *
	// * @param theNickName 昵称 <String>
	// * @param resultBlock 用户Id列表 <User>
	// */
	// public void searchUserWithNickname(
	// ArrayList<String> nicknames,
	// int limit,
	// ArrayList <AVUser> notContainedUserIds,
	// final CallBack listCallback) {
	//
	//
	// if (nicknames==null || nicknames.size()==0)
	// {
	// listCallback.done(null, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("nicknames", nicknames);
	// params.put("limit", limit);
	// params.put("notContainedUserIds", notContainedUserIds);
	//
	// // AVQuery<AVObject> userQ = new AVQuery<AVObject>("_User");
	// // ALEngineConfig._includeKeyWithUser(userQ);
	// // userQ.whereEqualTo("nickname", nicknames);
	// // userQ.findInBackground(new FindCallback<AVObject>() {
	// //
	// // @Override
	// // public void done(List<AVObject> arg0, AVException arg1) {
	// // // TODO Auto-generated method stub
	// // listCallback.done(arg0,arg1);
	// // }
	// //
	// // });
	//
	// AVCloud.callFunctionInBackground("searchUserByMyFollowWithNickname",
	// params,new FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	//
	// // TODO Auto-generated method stub
	// ArrayList<String> userIds = (ArrayList)object;
	//
	// if (e!=null || userIds.size()==0)
	// {
	// listCallback.done(userIds,e);
	// return;
	// }
	//
	// AVQuery<AVUser> userQ = new AVQuery<AVUser>("_User");
	// userQ.whereContainedIn("objectId", userIds);
	// userQ.findInBackground(new FindCallback<AVUser>() {
	//
	// @Override
	// public void done(List<AVUser> users, AVException e) {
	// // TODO Auto-generated method stub
	// listCallback.done(users,e);
	// }
	// });
	// // ArrayList <AVObject> users = new ArrayList <AVObject>();
	// //
	// // for (String userId : userIds)
	// // {
	// // users.add(new AVUser().createWithoutData("_User", userId));
	// // }
	// //
	// // AVUser.fetchAllIfNeededInBackground(users, new
	// FindCallback<AVObject>() {
	// //
	// // @Override
	// // public void done(List<AVObject> users, AVException e) {
	// // // TODO Auto-generated method stub
	// // listCallback.done(users,e);
	// // }
	// //
	// // });
	// }
	// });
	// }
	//
	// // 46
	// /**
	// * 根据昵称查找我的好友
	// *
	// * @param theNickName <#theNickName description#>
	// * @param theLimit <#theLimit description#>
	// * @param theNotContainedUsers <#theNotContainedUsers description#>
	// * @param resultBlock <#resultBlock description#>
	// */
	// public void searchUserByMyFollowWithNickname(
	// ArrayList<String> nicknames,
	// int limit,
	// ArrayList <AVUser> notContainedUserIds,
	// final CallBack listCallback) {
	//
	//
	// if (nicknames==null || nicknames.size()==0)
	// {
	// listCallback.done(null, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("nicknames", nicknames);
	// params.put("limit", limit);
	// params.put("notContainedUserIds", notContainedUserIds);
	//
	// // AVQuery<AVObject> userQ = new AVQuery<AVObject>("_User");
	// // ALEngineConfig._includeKeyWithUser(userQ);
	// // userQ.findInBackground(new FindCallback<AVObject>() {
	// //
	// // @Override
	// // public void done(List<AVObject> arg0, AVException arg1) {
	// // // TODO Auto-generated method stub
	// // listCallback.done(arg0,arg1);
	// // }
	// //
	// // });
	//
	// AVCloud.callFunctionInBackground("searchUserByMyFollowWithNickname",
	// params,new FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	//
	// // TODO Auto-generated method stub
	// ArrayList<String> userIds = (ArrayList)object;
	//
	// if (e!=null || userIds.size()==0)
	// {
	// listCallback.done(userIds,e);
	// return;
	// }
	//
	// AVQuery<AVUser> userQ = new AVQuery<AVUser>("_User");
	// userQ.whereContainedIn("objectId", userIds);
	// userQ.findInBackground(new FindCallback<AVUser>() {
	//
	// @Override
	// public void done(List<AVUser> users, AVException e) {
	// // TODO Auto-generated method stub
	// listCallback.done(users,e);
	// }
	// });
	// }
	// });
	// }
	//
	//
	// // 30
	// /**
	// * 查找附近用户
	// *
	// * @param theUsers 排除用户 <User>
	// * @param theLatitude 经度 <float>
	// * @param theLongitude 纬度 <float>
	// * @param theDistance 半径（公里） <float>
	// * @param resultBlock 用户列表 <User>
	// */
	// public void searchUserWithNear(
	// double latitude,
	// double longitude,
	// float distance,
	// ALUserGender gender,
	// int limit,
	// ArrayList <AVUser> notContainedUsers,
	// final CallBack listCallback) {
	//
	// if (this.isLoggedIn()==false)
	// {
	// listCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// AVQuery<AVUser> userQ = AVQuery.getQuery("_User");
	// // userQ.whereExists("location");
	// // userQ.whereWithinKilometers("location", new AVGeoPoint(latitude,
	// longitude), distance>0?distance:6371);
	// userQ.whereNear("location", new AVGeoPoint(latitude, longitude));
	// if (gender.get_value()!=0) userQ.whereEqualTo("gender",
	// gender.get_value());
	// userQ.whereNotEqualTo("objectId", ALEngineConfig.user().getObjectId());
	//
	// userQ.whereExists("nickname");
	// userQ.whereExists("headViewURL");
	//
	// if (notContainedUsers!=null && !notContainedUsers.isEmpty())
	// {
	// ArrayList <String> users = new ArrayList <String>();
	// for (AVUser user : notContainedUsers)
	// {
	// users.add(user.getObjectId());
	// }
	// userQ.whereNotContainedIn("objectId", users);
	// }
	//
	// if (limit>0) userQ.limit(limit);
	// ALEngineConfig._includeKeyWithUser(userQ);
	// userQ.findInBackground(new FindCallback<AVUser>() {
	//
	// @Override
	// public void done(List<AVUser> list, AVException e) {
	// listCallback.done(list, e);
	// }
	// });
	// }
	//
	// // 33
	// /**
	// * 获取礼物列表
	// *
	// * @param theInSale 是否在售 <BOOL>
	// * @param resultBlock 礼物列表 <Gift>
	// */
	// public void getGifts(
	// Boolean inSale,
	// final CallBack listCallback) {
	//
	// AVQuery <AVObject> giftQ = new AVQuery<AVObject>("Gift");
	// if (inSale) giftQ.whereEqualTo("inSale", inSale);
	// giftQ.findInBackground(new FindCallback<AVObject>() {
	//
	// @Override
	// public void done(List<AVObject> list, AVException e) {
	// listCallback.done(list, e);
	// }
	// });
	// }
	//
	// // 34
	// /**
	// * 送礼
	// *
	// * @param theUser 用户 <User>
	// * @param theGift 礼物 <Gift>
	// * @param theNumber 礼物数量 <int>
	// * @param resultBlock 是否成功 <BOOL>
	// */
	// public void sendGift(
	// AVObject gift,
	// final AVUser toUser,
	// int number,
	// String messageOfText,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (gift.getObjectId()==null || toUser.getObjectId()==null || number<=0)
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// HashMap <String,Object> params = new HashMap<String, Object>();
	// params.put("userId", toUser.getObjectId());
	// params.put("giftId", gift.getObjectId());
	// params.put("number", number);
	// if (messageOfText.length()>0) params.put("messageOfText", messageOfText);
	//
	// AVCloud.callFunctionInBackground("sendGift", params,new
	// FunctionCallback<Object>() {
	//
	// @Override
	// public void done(Object object, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null,e);
	//
	// if (e==null)
	// {
	// /*
	// * 发通知
	// */
	// ALPushCenter.isClosePushAlert(AVUser.getCurrentUser(), new CallBack() {
	//
	// @Override
	// public void done(Object obj, AVException e) {
	// // TODO Auto-generated method stub
	// if (e==null && (Boolean)obj!=true)
	// {
	// AVQuery<AVInstallation> installQ = AVInstallation.getQuery();
	// installQ.whereEqualTo("user", toUser);
	//
	// ALPushCenter.sendPush(installQ, ALPushType.ALPushTypeOfGift, 0);
	// }
	// }
	// });
	// }
	// }
	// } );
	// }
	//
	// // 35
	// /**
	// * 收到的礼物数1 -- 总体数量（检查用户收到的某种礼物数量）
	// *
	// * @param theGift 礼物种类 <Gift>
	// * @param theUser 接受礼物的用户 <User>
	// * @param resultBlock 数量 <int>
	// * PS:礼物种类传null 会得到用户收到的全部礼物数
	// */
	// public void getReceivedGiftCount(
	// AVObject gift,
	// AVUser toUser,
	// final CallBack intCallback) {
	//
	// if (gift.getObjectId()==null || toUser.getObjectId()==null)
	// {
	// intCallback.done(0, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// AVQuery<AVObject> giftCountQ = new AVQuery<AVObject>("GiftCount");
	// if (gift!=null) giftCountQ.whereEqualTo("gift",
	// ALEngineConfig.objectWithoutData(gift));
	// giftCountQ.whereEqualTo("user",
	// ALEngineConfig.objectWithoutData(toUser));
	// giftCountQ.whereNotEqualTo("number", 0);
	// giftCountQ.findInBackground(new FindCallback<AVObject>() {
	//
	// @Override
	// public void done(List<AVObject> objects, AVException e) {
	// // TODO Auto-generated method stub
	// int number = 0;
	// for (AVObject obj : objects)
	// {
	// number+=obj.getInt("number");
	// }
	// intCallback.done(number,e);
	// }
	// });
	// }
	//
	// // 36
	// /**
	// * 收到的礼物数2 -- 数量明细（检查用户收到的全部礼物数量）
	// *
	// * @param theUser 用户 <User>
	// * @param resultBlock {"gift":<Gift>,"number":<int>}
	// */
	// public void getReceivedGiftCount(
	// AVUser user,
	// final CallBack listCallback) {
	//
	// if (user.getObjectId()==null)
	// {
	// listCallback.done(null, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// AVQuery<AVObject> giftCountQ = new AVQuery<AVObject>("GiftCount");
	// giftCountQ.whereEqualTo("toUser",
	// ALEngineConfig.objectWithoutData(user));
	// giftCountQ.whereNotEqualTo("number", 0);
	// ALEngineConfig._includeKeyWithGiftCount(giftCountQ);
	// giftCountQ.findInBackground(new FindCallback<AVObject>() {
	//
	// @Override
	// public void done(List<AVObject> objects, AVException e) {
	// // TODO Auto-generated method stub
	//
	// ArrayList <HashMap> giftList = new ArrayList<HashMap>();
	// if(objects == null)
	// {
	// listCallback.done(giftList,e);
	// return;
	// }
	// for (AVObject giftCount : objects)
	// {
	// HashMap<String,Object> giftDict = new HashMap<String, Object>();
	// giftDict.put("gift", giftCount.getAVObject("gift"));
	// giftDict.put("number", giftCount.getInt("number"));
	//
	// giftDict.put("updatedAt", giftCount.getUpdatedAt());
	// giftList.add(giftDict);
	// }
	// listCallback.done(giftList,e);
	// }
	// });
	// }
	//
	// // 37
	// /**
	// * 查看送礼人 （点击礼物列表进入）
	// *
	// * @param theGift 送礼种类 <Gift>
	// * @param theUser 接受者 <User>
	// * @param theLimit 分页limit <int>
	// * @param theSkip 分页skip <int>
	// * @param resultBlock 送礼记录 <GiftRecorder>
	// */
	// public void getReceivedGiftTotalCount(
	// AVObject gift,
	// AVUser user,
	// final CallBack listCallback) {
	//
	// AVQuery<AVObject> giftRecorderQ = new AVQuery<AVObject>("GiftRecorder");
	// giftRecorderQ.whereEqualTo("gift",
	// ALEngineConfig.objectWithoutData(gift));
	// giftRecorderQ.whereEqualTo("toUser",
	// ALEngineConfig.objectWithoutData(user));
	// giftRecorderQ.whereNotEqualTo("number", 0);
	// giftRecorderQ.orderByDescending("createdAt");
	// ALEngineConfig._includeKeyWithGiftRecorder(giftRecorderQ);
	// giftRecorderQ.findInBackground(new FindCallback<AVObject>() {
	//
	// @Override
	// public void done(List<AVObject> objects, AVException e) {
	// // TODO Auto-generated method stub
	//
	// listCallback.done(objects, e);
	// }
	// });
	// }
	//
	//
	// // 38
	// /**
	// * 粉丝贡献榜
	// *
	// * @param theUser 礼物接受者 <User>
	// * @param theLimit 分页 <int>
	// * @param theSkip 分页 <int>
	// * @param resultBlock 用户列表 <User>
	// */
	// public void getUserContributionsRanking(
	// AVUser user,
	// int limit,
	// int skip,
	// final CallBack listCallback) {
	//
	//
	// }
	//
	// // 39
	// /**
	// * 留言
	// *
	// * @param theText 留言内容 <String>
	// * @param theUser 目标用户 <User>
	// * @param resultBlock 是否成功 <BOOL>
	// */
	// public void leaveAMesage(
	// String text,
	// final AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (text.length()==0 || user==null || user.getObjectId()==null)
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// AVObject mob = new AVObject("MessageOfBBS");
	// mob.put("fromUser",
	// ALEngineConfig.objectWithoutData(ALEngineConfig.user()));
	// mob.put("toUser", ALEngineConfig.objectWithoutData(user));
	// mob.put("text", text);
	// mob.put("isReaded",false);
	// mob.put("isDeleted",false);
	// mob.saveInBackground(new SaveCallback() {
	//
	// @Override
	// public void done(AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null, e);
	//
	// if (e==null)
	// {
	// /*
	// * 发通知
	// */
	// ALPushCenter.isClosePushAlert(AVUser.getCurrentUser(), new CallBack() {
	//
	// @Override
	// public void done(Object obj, AVException e) {
	// // TODO Auto-generated method stub
	// if (e==null && (Boolean)obj!=true)
	// {
	// AVQuery<AVInstallation> installQ = AVInstallation.getQuery();
	// installQ.whereEqualTo("user", user);
	//
	// ALPushCenter.sendPush(installQ, ALPushType.ALPushTypeOfMessageOfBBs, 0);
	// }
	// }
	// });
	// }
	// }
	// });
	// }
	//
	// // 40
	// /**
	// * 删除留言
	// *
	// * @param theMessOfBbs 留言
	// * @param block 是否成功
	// */
	// public void deleteTheBBSMessage(
	// AVObject message,
	// final CallBack boolCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (message==null || message.getObjectId()==null)
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// message.fetchIfNeededInBackground(new GetCallback<AVObject>() {
	//
	// @Override
	// public void done(AVObject object, AVException e) {
	// // TODO Auto-generated method stub
	// if (object!=null && e==null)
	// {
	//
	// if (object.getAVObject("fromUser")!=null)
	// {
	// if (object.getAVObject("fromUser").getObjectId()!=null)
	// {
	// if
	// (object.getAVObject("fromUser").getObjectId().equals(ALEngineConfig.user().getObjectId()))
	// {
	// object.put("isDeleted", true);
	// object.saveEventually(new SaveCallback() {
	//
	// @Override
	// public void done(AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null, e);
	// }
	// });
	// }
	// }
	// }
	// }
	// else
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// }
	// }
	// });
	// }
	//
	// // 41
	// /**
	// * 获得留言
	// *
	// * @param theUser 用户 <User>
	// * @param theSkip 分页 <int>
	// * @param theLimit 分页 <int>
	// * @param resultBlock 留言列表 <MessageOfBBS>
	// */
	// public void getMessageOfBBSList(
	// AVUser user,
	// int limit,
	// int skip,
	// Boolean isOrderedAscending,
	// final CallBack listCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// listCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || user.getObjectId()==null)
	// {
	// listCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// AVQuery<AVObject> mobQ = new AVQuery<AVObject>("MessageOfBBS");
	// mobQ.whereEqualTo("toUser", ALEngineConfig.objectWithoutData(user));
	// mobQ.include("toUser");
	// mobQ.include("fromUser");
	// mobQ.include("giftRecorder");
	// mobQ.include("giftRecorder.gift");
	// if (limit>0) mobQ.limit(limit);
	// if (skip>0) mobQ.skip(skip);
	// if (isOrderedAscending) mobQ.orderByAscending("createdAt");
	// else mobQ.orderByAscending("createdAt");
	//
	//
	// mobQ.findInBackground(new FindCallback<AVObject>() {
	// @Override
	// public void done(List<AVObject> obj, AVException e) {
	// listCallback.done(obj, e);
	// }
	// });
	// }
	//
	//
	// // 42
	// /**
	// * 获得留言数
	// *
	// * @param theUser 用户 <User>
	// * @param resultBlock 留言列表 <MessageOfBBS>
	// */
	// public void getMessageOfBBSCount(
	// AVUser user,
	// final CallBack listCallback) {
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// listCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || user.getObjectId()==null)
	// {
	// listCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// AVQuery<AVObject> mobQ = new AVQuery<AVObject>("MessageOfBBS");
	// mobQ.whereEqualTo("toUser", ALEngineConfig.objectWithoutData(user));
	// mobQ.countInBackground(new CountCallback() {
	//
	// @Override
	// public void done(int number, AVException e) {
	// // TODO Auto-generated method stub
	// listCallback.done(number, e);
	// int i=0;
	// i = true?0:1;
	//
	//
	// }
	// });
	// }
	//
	// // 43
	// /**
	// * 举报
	// *
	// * @param theObject <User> <Photo> <MessageOfBBS> <Group> <MessageOfChat>
	// * @param theReason 举报原因 <String>
	// * @param resultBlock 是否成功 <BOOL>
	// */
	// public void reportWithObject(
	// AVUser object,
	// String reason,
	// final CallBack boolCallback) {
	//
	// if (!this.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (object==null || object.getObjectId()==null)
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// AVObject report = new AVObject("ReportLog");
	// report.put("user",
	// ALEngineConfig.objectWithoutData(ALEngineConfig.user()));
	// report.put(object.getClassName(), object);
	// report.put("reason", reason);
	// report.saveInBackground(new SaveCallback() {
	//
	// @Override
	// public void done(AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(e==null, e);
	// }
	// });
	// }
	//
	// /**
	// * 屏蔽某用户的消息
	// *
	// * @param theUser <#theUser description#>
	// * @param resultBlock <#resultBlock description#>
	// */
	// public void addBanToUser(
	// AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!this.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || !"_User".equals(user.getClassName()) ||
	// user.getObjectId()==null ||
	// user.getObjectId().equals(AVUser.getCurrentUser().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// HashMap<String, Object> params = new HashMap<String, Object>();
	// params.put("fromUserId", AVUser.getCurrentUser().getObjectId());
	// params.put("toUserId", user.getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfBan.get_value());//ALUserRelationType.ALUserRelationStateOfBan.get_value()
	// AVCloud.callFunctionInBackground("addUserRelation", params, new
	// FunctionCallback<Boolean>() {
	//
	// @Override
	// public void done(java.lang.Boolean suc, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(suc,e);
	// }
	// });
	// }
	//
	//
	// /**
	// * 取消屏蔽某用户的消息
	// *
	// * @param theUser <#theUser description#>
	// * @param resultBlock <#resultBlock description#>
	// */
	// public void removeBanToUser(
	// AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!this.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || !"_User".equals(user.getClassName()) ||
	// user.getObjectId()==null ||
	// user.getObjectId().equals(AVUser.getCurrentUser().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// HashMap<String, Object> params = new HashMap<String, Object>();
	// params.put("fromUserId", AVUser.getCurrentUser().getObjectId());
	// params.put("toUserId", user.getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfBan.get_value());//ALUserRelationType.ALUserRelationStateOfBan.get_value()
	// AVCloud.callFunctionInBackground("removeUserRelation", params, new
	// FunctionCallback<Boolean>() {
	//
	// @Override
	// public void done(java.lang.Boolean suc, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(suc,e);
	// }
	// });
	// }
	//
	// public void getMyBanList(
	// int limit,
	// int skip,
	// final CallBack listCallback){
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// listCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// AVQuery<AVObject> banQ =
	// ALUserEngine._queryUserRelation(ALEngineConfig.user(),null,ALUserRelationType.ALUserRelationTypeOfBan,limit,skip);
	// ALEngineConfig.findObjectsInBackground(banQ,"toUser",listCallback);
	//
	// }
	//
	// public void getMyBanCount(
	// final CallBack intCallback){
	//
	// if (!ALEngineConfig.isLoggedIn())
	// {
	// intCallback.done(0, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// AVQuery<AVObject> banQ =
	// ALUserEngine._queryUserRelation(ALEngineConfig.user(),null,ALUserRelationType.ALUserRelationTypeOfBan,0,0);
	// banQ.countInBackground(new CountCallback() {
	//
	// @Override
	// public void done(int number, AVException e) {
	// // TODO Auto-generated method stub
	// intCallback.done(number, e);
	// }
	// });
	// }
	//
	// /**
	// * 该用户是否屏蔽了我 (被屏蔽的用户 发消息会显示成功 网上会有聊天记录(isBaned) 但是对方不会受到 只有发消息自己会有)
	// *
	// * @param theUser 该用户
	// * @param resultBlock
	// */
	// public void isBanToMeByUser(
	// AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!this.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || "_User".equals(user.getClassName()) ||
	// user.getObjectId()==null ||
	// user.getObjectId().equals(AVUser.getCurrentUser().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// HashMap<String, Object> params = new HashMap<String, Object>();
	// params.put("toUserId", AVUser.getCurrentUser().getObjectId());
	// params.put("fromUserId", user.getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfBan.get_value());//ALUserRelationType.ALUserRelationStateOfBan.get_value()
	// AVCloud.callFunctionInBackground("checkRelationWhetherIsExist", params,
	// new FunctionCallback<Boolean>() {
	//
	// @Override
	// public void done(java.lang.Boolean suc, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(suc,e);
	// }
	// });
	// }
	//
	// /**
	// * 我是否屏蔽了该用户
	// *
	// * @param theUser 该用户
	// * @param resultBlock <#resultBlock description#>
	// */
	// public void isBanByMyWithUser(
	// AVUser user,
	// final CallBack boolCallback) {
	//
	// if (!this.isLoggedIn())
	// {
	// boolCallback.done(false, new AVException(110, "没有登录"));
	// return;
	// }
	//
	// if (user==null || !"_User".equals(user.getClassName()) ||
	// user.getObjectId()==null ||
	// user.getObjectId().equals(ALEngineConfig.user().getObjectId()))
	// {
	// boolCallback.done(false, new AVException(111, "参数错误"));
	// return;
	// }
	//
	// HashMap<String, Object> params = new HashMap<String, Object>();
	// params.put("fromUserId", AVUser.getCurrentUser().getObjectId());
	// params.put("toUserId", user.getObjectId());
	// params.put("type",
	// ALUserRelationType.ALUserRelationTypeOfBan.get_value());//ALUserRelationType.ALUserRelationStateOfBan.get_value()
	// AVCloud.callFunctionInBackground("checkRelationWhetherIsExist", params,
	// new FunctionCallback<Boolean>() {
	//
	// @Override
	// public void done(java.lang.Boolean suc, AVException e) {
	// // TODO Auto-generated method stub
	// boolCallback.done(suc,e);
	// }
	// });
	// }

	// 获取woeid
	public void callALFunctionInBackground(String url,
			HashMap<String, String> params, final CallBack callback) {

		AsyncHttpClient client = new AsyncHttpClient();
		client.post(url, new RequestParams(params),
				new AsyncHttpResponseHandler() {

					@Override
					public void onFailure(int arg0, Header[] arg1, byte[] arg2,
							Throwable arg3) {
						callback.done(null, new AVException(arg3));
					}

					@Override
					public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {

						JSONObject resultInfo;

						Object obj = null;
						AVException error = null;

						try {

							resultInfo = new JSONObject(new String(arg2));

							if (resultInfo.has("object")) {
								obj = resultInfo.get("object");
							}

							if (resultInfo.has("error")) {
								JSONObject errorDict = resultInfo
										.getJSONObject("error");

								if (errorDict != null) {
									error = new AVException(errorDict
											.getInt("code"), errorDict
											.getString("message"));
								}
							}

						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
							error = new AVException(1, e.getMessage());
						}

						callback.done(obj, error);
					};
				});

	}

	static int ALPhoneVerifyStateOfUndefine = 0; // 未知、未定义、不做限制
	static int ALPhoneVerifyStateOfReadyToLogin = 1; // 需要注册
	static int ALPhoneVerifyStateOfNotReadyToLogin = 2; // 已经注册,可直接登陆

	static String ALDomain = "http://192.168.199.232:3000";

	// static String ALDomain = "http://flowerso2o.avosapps.com";

	// 检查手机号
	public void checkPhoneNumber(String phoneNumber, final CallBack intCallback) {

		String URL = ALDomain + "/user/login/checkPhoneNumber";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("phoneNumber", phoneNumber);

		this.callALFunctionInBackground(URL, params, intCallback);

		// AVQuery<AVUser> userQ = AVUser.getQuery();
		// userQ.whereEqualTo("phoneNumber", phoneNumber);
		// userQ.limit(1);
		// userQ.findInBackground(new FindCallback<AVUser>() {
		//
		// @Override
		// public void done(List<AVUser> objects, AVException error) {
		// if (error!=null)
		// {
		// // 错误
		// intCallback.done(0,error);
		// }
		// else if (objects.size()>0)
		// {
		// intCallback.done(ALPhoneVerifyStateOfReadyToLogin,error);
		// }
		// else
		// {
		// intCallback.done(ALPhoneVerifyStateOfNotReadyToLogin,error);
		// }
		// }
		// });

	}

	static int ALSmsCodeTypeOfUndefine = 0;
	static int ALSmsCodeTypeOfSignUp = 1; // 手机注册
	static int ALSmsCodeTypeOfResetPwd = 2; // 重置密码
	static int ALSmsCodeTypeOfResetPhone = 3; // 更换手机号

	// 发送验证
	public void postSmsCodeToPhone(
			String phoneNumber, 
			int type,
			final CallBack boolCallback) {

		String URL = ALDomain + "/user/login/postSmsCode";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("phoneNumber", phoneNumber);
		params.put("type", String.valueOf(type));
		this.callALFunctionInBackground(URL, params, boolCallback);

		// String operation = null;
		// switch (type) {
		// case 1:
		// {
		// operation = "手机号注册";
		// }
		// break;
		// case 2:
		// {
		// operation = "重置密码";
		// }
		// break;
		// case 3:
		// {
		// operation = "手机绑定";
		// }
		// break;
		// default:
		// break;
		// }
		//
		// AVOSCloud.requestSMSCodeInBackgroud(phoneNumber, null, operation, 0,
		// new RequestMobileCodeCallback() {
		//
		// @Override
		// public void done(AVException e) {
		// //do something you need
		// boolCallback.done(e==null,e);
		// }
		// });

	}

	// 接受验证
	public void postSmsCodeToPhone(String phoneCode, String phoneNumber,
			final CallBack boolCallback) {

		String URL = ALDomain + "/user/login/receiveSmsCode";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("phoneNumber", phoneNumber);
		params.put("phoneCode", phoneCode);
		this.callALFunctionInBackground(URL, params, boolCallback);

		// AVOSCloud.verifySMSCodeInBackground(phoneCode, phoneNumber, new
		// AVMobilePhoneVerifyCallback() {
		//
		// @Override
		// public void done(AVException e) {
		// //do something you need
		// boolCallback.done(e==null,e);
		// }
		// });

	}

	// 手机号登陆
	public void loginByPhoneNumber(final String phoneNumber,
			final String phonePwd, final CallBack boolCallback) {

		String URL = ALDomain + "/user/login/getLoginInfo";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("phoneNumber", phoneNumber);
		params.put("phonePwd", phonePwd);
		this.callALFunctionInBackground(URL, params, new CallBack() {

			@Override
			public void done(Object object, AVException e) {
				// TODO Auto-generated method stub
				// HashMap<String, String>;
				if (e != null) {
					boolCallback.done(false, e);
					return;
				}
				JSONObject loginInfo = (JSONObject) object;
				String username;
				String password;
				try {
					username = loginInfo.getString("username");
					password = loginInfo.getString("password");
					AVUser.logInInBackground(username, password,
							new LogInCallback<AVUser>() {

								@Override
								public void done(AVUser arg0, AVException e) {
									// TODO Auto-generated method stub
									boolCallback.done(e != null, e);
								}
							});
				} catch (JSONException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
					boolCallback.done(e1 != null,
							new AVException(1, e1.getMessage()));
				}
			}
		});

		// AVQuery<AVUser> userQ = AVUser.getQuery();
		// userQ.whereEqualTo("phoneNumber", phoneNumber);
		// userQ.limit(1);
		// userQ.findInBackground(new FindCallback<AVUser>() {
		//
		// @Override
		// public void done(List<AVUser> objects, AVException error) {
		// if (error!=null)
		// {
		// // 错误
		// boolCallback.done(false,error);
		// }
		// else if (objects.size()>0)
		// {
		// AVUser user = objects.get(0);
		// if (user.getString("phonePwd").equals(MD5(password).toLowerCase()))
		// {
		// AVUser.logInInBackground(user.getString("username"),
		// user.getString("username").toLowerCase(), new LogInCallback<AVUser>()
		// {
		//
		// @Override
		// public void done(AVUser arg0, AVException e) {
		// // TODO Auto-generated method stub
		// boolCallback.done(e!=null,e);
		// }
		// });
		// }
		// else
		// {
		// boolCallback.done(false,new AVException(666731, "密码错误"));
		// }
		// }
		// else
		// {
		// boolCallback.done(false,new AVException(666732, "没有注册"));
		// }
		// }
		// });

	}

	// MD5
	static String MD5(String str) {
		return str;
	}

	// uuid
	static String uuid() {
		return "";
	}

	// 手机注册
	public void signUpByPhoneNumber(final String phoneNumber,
			final String phonePwd, final CallBack boolCallback) {

		String URL = ALDomain + "/user/login/signUp";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("phoneNumber", phoneNumber);
		params.put("phonePwd", phonePwd);
		this.callALFunctionInBackground(URL, params, boolCallback);

		// String uuid = uuid();
		// AVUser user = new AVUser();
		// user.setUsername(uuid.toUpperCase());
		// user.setPassword(uuid.toLowerCase());
		// user.put("phoneNumber", phoneNumber);
		// user.put("phonePwd", MD5(password).toLowerCase());
		// user.put("userType", 1);
		// user.signUpInBackground(new SignUpCallback() {
		// public void done(AVException e) {
		// boolCallback.done(e==null,e);
		// }
		// });
	}

	// 修改密码
	public void resetPassword(final String phoneNumber, final String phonePwd,
			final CallBack boolCallback) {

		String URL = ALDomain + "/user/login/resetPassword";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("phoneNumber", phoneNumber);
		params.put("phonePwd", phonePwd);
		this.callALFunctionInBackground(URL, params, boolCallback);
	}

	//
	public void getWaitingForDeliveryOrders(final CallBack listCallback) {

		String URL = ALDomain + "/delivery/getWaitingForDeliveryOrders";
		HashMap<String, String> params = new HashMap<String, String>();
		this.callALFunctionInBackground(URL, params, new CallBack() {

			@Override
			public void done(Object obj, AVException e) {
				// TODO Auto-generated method stub
				if (e != null) {
					listCallback.done(null, e);
					return;
				}

				ArrayList<AVObject> orders = new ArrayList<AVObject>();
				for (int i = 0; i < ((JSONArray) obj).length(); i++) {
					try {
						orders.add(AVObject.createWithoutData("CommodityOrder",
								((JSONArray) obj).getString(i)));
					} catch (JSONException e1) {
						e1.printStackTrace();
					}
				}

				AVObject.fetchAllInBackground(orders,
						new FindCallback<AVObject>() {

							@Override
							public void done(List<AVObject> objs, AVException e) {
								// TODO Auto-generated method stub
								listCallback.done(objs, e);
							}
						});
			}
		});
	}

	public void getCarts(AVObject order, final CallBack listCallback) {

		order.fetchIfNeededInBackground("carts", new GetCallback<AVObject>() {

			@Override
			public void done(AVObject arg0, AVException e) {
				arg0.getRelation("carts").getQuery()
						.findInBackground(new FindCallback<AVObject>() {

							@Override
							public void done(List<AVObject> objs, AVException e) {
								// TODO Auto-generated method stub
								listCallback.done(objs, e);
							}
						});
			}
		});
	}

	// 通用回调
	// 接口 不实现 使用时必须实现接口中所有方法
	public interface CallBack {
		void done(Object object, AVException avexception);
	}

	public void _includeKeyWithCommodityCartQuery(AVQuery<AVObject> cartQ) {
		cartQ.include("user");
		cartQ.include("commodity");
		cartQ.include("commodity.coverView");
		cartQ.include("commodity.store");
		cartQ.include("commodity.store.creater");

	}

	// 抢单
	public void openDelivery(final AVObject order, final CallBack boolCallback) {

		String URL = ALDomain + "/delivery/open";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("orderId", order.getObjectId());
		params.put("userId", AVUser.getCurrentUser().getObjectId());
		this.callALFunctionInBackground(URL, params, boolCallback);
	}

	// 我抢到的配送单
	public void getMyDelivery(final CallBack listCallback) {

		String URL = ALDomain + "/delivery/getMyDelivery";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("userId", AVUser.getCurrentUser().getObjectId());
		this.callALFunctionInBackground(URL, params, new CallBack() {

			@Override
			public void done(Object obj, AVException e) {
				// TODO Auto-generated method stub
				if (e != null) {
					listCallback.done(null, e);
					return;
				}

				ArrayList<AVObject> deliverys = new ArrayList<AVObject>();
				for (int i = 0; i < ((JSONArray) obj).length(); i++) {
					try {
						deliverys.add(AVObject.createWithoutData(
								"CommodityDelivery",
								((JSONArray) obj).getString(i)));
					} catch (JSONException e1) {
						e1.printStackTrace();
					}

				}
				AVObject.fetchAllInBackground(deliverys,
						new FindCallback<AVObject>() {

							@Override
							public void done(List<AVObject> objs, AVException e) {
								// TODO Auto-generated method stub
								listCallback.done(objs, e);
							}
						});
			}
		});
	}

	// 放弃订单
	public void closeDelivery(final AVObject delivery,
			final CallBack boolCallback) {

		String URL = ALDomain + "/delivery/close";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("deliveryId", delivery.getObjectId());
		params.put("userId", AVUser.getCurrentUser().getObjectId());
		this.callALFunctionInBackground(URL, params, boolCallback);
	}

	// 开始配送
	public void startDelivery(final AVObject delivery,
			final CallBack boolCallback) {

		String URL = ALDomain + "/delivery/start";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("deliveryId", delivery.getObjectId());
		params.put("userId", AVUser.getCurrentUser().getObjectId());
		this.callALFunctionInBackground(URL, params, boolCallback);
	}

	// 上传坐标
	public void updateDelivery(final AVObject delivery, final AVGeoPoint point,
			final String location, final CallBack boolCallback) {
		delivery.toString();
		String URL = ALDomain + "/delivery/updateDelivery";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("deliveryId", delivery.getObjectId());
		params.put("userId", AVUser.getCurrentUser().getObjectId());
		params.put("latitude", String.valueOf(point.getLatitude()));
		params.put("longitude", String.valueOf(point.getLongitude()));
		params.put("location", location);
		this.callALFunctionInBackground(URL, params, boolCallback);
	}

	// 重发 收货码
	public void repostCode(final AVObject delivery, final CallBack boolCallback) {

		String URL = ALDomain + "/delivery/repostCode";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("deliveryId", delivery.getObjectId());
		params.put("userId", AVUser.getCurrentUser().getObjectId());
		this.callALFunctionInBackground(URL, params, boolCallback);
	}

	// 送达 配送结束
	public void doneDelivery(final AVObject delivery,
			final String deliveryCode, final CallBack boolCallback) {

		String URL = ALDomain + "/delivery/done";
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("deliveryId", delivery.getObjectId());
		params.put("deliveryCode", deliveryCode);
		params.put("userId", AVUser.getCurrentUser().getObjectId());
		this.callALFunctionInBackground(URL, params, boolCallback);
	}

	
	public void createPhotoFromImagePath(
				String filePath,
				final String introduction,
				final CallBack progressBlock,
				final CallBack objectCallback) {
		try {
			 final AVFile file = AVFile.withAbsoluteLocalPath("customImage",filePath);
			 file.saveInBackground(new SaveCallback() {
			
				 @Override
				 public void done(AVException e) {
					 final AVObject photo = new AVObject("Photo");
						photo.put("url", file.getUrl());
						photo.put("introduction", introduction);
						photo.saveInBackground(new SaveCallback() {
							
							@Override
							public void done(AVException e) {
								// TODO Auto-generated method stub
								objectCallback.done(photo,e);
							}
						});
				 }
			 }, new ProgressCallback() {
				
				 @Override
				 public void done(Integer progress) {
					 progressBlock.done(progress,null);
				 }
			 });
		} catch (Exception e) {
			 // TODO Auto-generated catch block
			objectCallback.done(null,new AVException(e.getCause()));
		 }
	}
	
	public void createPhotoFromImageData(
				byte[] fileData,
				final String introduction,
				final CallBack progressBlock,
				final CallBack objectCallback) {
		
		final AVFile file = new AVFile(fileData);
		file.saveInBackground(new SaveCallback() {
		
			@Override
			public void done(AVException e) {
				// TODO Auto-generated method stub
				
				final AVObject photo = new AVObject("Photo");
				photo.put("url", file.getUrl());
				photo.put("introduction", introduction);
				photo.saveInBackground(new SaveCallback() {
					
					@Override
					public void done(AVException e) {
						// TODO Auto-generated method stub
						objectCallback.done(photo,e);
					}
				});
			}
		}, new ProgressCallback() {
		
			@Override
			public void done(Integer progress) {
				// TODO Auto-generated method stub
				progressBlock.done(progress,null);
			}
		});
	}
	
	public void updateOrderCustomPhoto(
			AVObject order,
			AVObject photo,
			final CallBack boolCallback){
		order.put("customPhoto",photo);
		order.saveInBackground(new SaveCallback() {
			
			@Override
			public void done(AVException e) {
				// TODO Auto-generated method stub
				boolCallback.done(e==null,e);
			}
		});
	}
}
